#pragma once
#include <string>
#include <variant>
#include <functional>
#include <vector>
#include <map>
#include <memory>

// 属性值类型
using PropertyValue = std::variant<int, float, bool, std::string>;

// 属性类型枚举
enum class PropertyType {
    Integer,
    Float,
    Boolean,
    String,
    Color,
    Vector2,
    // 可以添加更多类型
};

// 属性描述符
struct PropertyDescriptor {
    std::string name;
    std::string displayName;
    PropertyType type;
    PropertyValue defaultValue;
    PropertyValue minValue;
    PropertyValue maxValue;
    std::string tooltip;
    
    // 对于枚举类型，可以存储可选值
    std::vector<std::string> options;
};

// 属性变更回调
using PropertyChangedCallback = std::function<void(const std::string&, const PropertyValue&)>;